SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

CREATE PROCEDURE [dbo].[pje_porAntiguedad] @idInscripcion as integer ,@pje as float output,@resultado as int  AS
set nocount on --para anular el trafico econ el cliente (no salen los print)
set dateformat mdy 

declare  @idAgente as int,@idCargoGenerico as int,@idAsignaturaGenerica as int, @idTipoConvocatoria as int ,@idlocalidad as int, @FechaLimite as datetime,@fechaCierreDeInscripciones as datetime,@nivel_insc as int,@ciclo as int
declare @titulo as int, @fechaEgreso as datetime,@idCapacitacion as integer, @FechaCapacitacion as datetime
declare @tieneCapacitacion as char(1) , @tieneCapacitacionParaHabilitaztes as char(1)
declare @Titulo1 as int,@Titulo2 as int,@Titulo3 as int,@Categoria as float
declare @cantidadPostgrados as int -- cantidad de postgrados relacionados al titulo con el que se inscribe el agente
--Variables del Cursor
declare @idcapacitacionc as int
declare @idagentec as int
declare @capacitacionc as int
declare @horascatedrac as int
declare @antiguedad as int
declare @pjeAntiguedadTitulo as float
declare @pjeAntiguedadDocente as float

set @pje=0

DECLARE @Error INT

BEGIN TRANSACTION
SET @ERROR=0


--TRAEMOS TODOS LOS DATOS DE LA INSCRIPCION A PARTIR DEL PARAMETRO DEL SP

select  @idAgente=i.Agente,@IdcargoGenerico = i.CargoGenerico,@IdAsignaturaGenerica=i.AsignaturaGenerica,@idtipoConvocatoria=Conv.TipoConvocatoria,@FechaLimite=Conv.FechaLimite,@fechaCierreDeInscripciones=Conv.fechaCierre,@nivel_insc = i.nivel,@ciclo=isnull(ciclo,1)
	from 
	tb_inscripcionesConvocatorias i 
		join tb_Convocatorias conv on i.Convocatoria=conv.idConvocatoria 
	where i.idInscripcionConvocatoria=@idInscripcion


/* ANTIGUEDAD POR TITULO */

set @pjeAntiguedadTitulo=0

		--PRIMERO PREGUNTAMOS SI SE INCRIBIO COMO TITULO 1 DOCENTE
		if(exists( SELECT t.titulo from tb_titulosdelagente t where t.agente=@idagente and t.titulo iN(select a.titulo3 from tb_anexotitulos a where a.asignaturagenerica=@idasignaturagenerica)))
			begin
			--(TITULO 1 DOCENTE)
			set @fechaegreso = (SELECT t.fechaegreso from tb_titulosdelagente t where t.agente=@idagente and t.titulo iN(select a.titulo3 from tb_anexotitulos a where a.asignaturagenerica=@idasignaturagenerica))
			end
		--IF ANIDADO - PREGUNTAMOS SI SE INSCRIBIO COMO HABILITANTE
		else if(exists (SELECT t.titulo from tb_titulosdelagente t where t.agente=@idagente and t.titulo iN(select a.titulo2 from tb_anexotitulos a where a.asignaturagenerica=@idasignaturagenerica)))
			begin
			--(TITULO HABILITANTE)
			set @fechaegreso = (SELECT t.fechaegreso from tb_titulosdelagente t where t.agente=@idagente and t.titulo iN(select a.titulo2 from tb_anexotitulos a where a.asignaturagenerica=@idasignaturagenerica))
			end
		--IF ANIDADO - PREGUNTAMOS SI SE INCRIBIO COMO SUPLETORIO
		else if(exists (SELECT t.titulo from tb_titulosdelagente t where t.agente=@idagente and t.titulo iN(select a.titulo1 from tb_anexotitulos a where a.asignaturagenerica=@idasignaturagenerica)))
			begin
			--(TITULO SUPLETORIO)
			set @fechaegreso = (SELECT t.fechaegreso from tb_titulosdelagente t where t.agente=@idagente and t.titulo iN(select a.titulo1 from tb_anexotitulos a where a.asignaturagenerica=@idasignaturagenerica))
			end
			
			if(@fechaegreso is not null)
				begin
				--SETEAMOS LA ANTIGUEDAD EN AÑOS USANDO LA FORMULA
				set @antiguedad = datediff(dd,@fechaegreso,getdate())/365
				if(@antiguedad>=12)
						begin
						set @pjeAntiguedadTitulo=3
						end
					else
						begin
						set @pjeAntiguedadTitulo=@antiguedad*0.25
						end
			    end

/*ANTIGUEDAD EN EL NIVEL MEDIO*/

declare @año as int
declare @findeanio datetime
declare @fechaAlta datetime
declare @fechaBaja datetime
declare @fechaBajaAnt datetime
declare @anios int
declare @diasAnio int 
declare @diasUltAnio int
declare @AnioAlta int
declare @AnioBaja int
declare @AnioBajaAnt int
SET @fechaBajaAnt = '1900-01-01'
set @pjeAntiguedadDocente=0

DECLARE antiguedadmedia CURSOR FORWARD_ONLY FOR
SELECT distinct sh.FechaAlta,isnull(sh.FechaBaja,@fechaCierreDeInscripciones)
FROM tb_ServiciosHistoricos sh where sh.idagente=@idAgente and sh.grupoincumbencias=571 
ORDER BY sh.fechaAlta asc
--ABRIMOS Y RECORREMOS EL CURSOR
open antiguedadmedia
fetch next from antiguedadmedia into @fechaAlta,@fechaBaja
while @@FETCH_STATUS = 0
	begin
	--HACER LOS CALCULOS AQUI TIENEN TIEMPO HASTA EL VIERNES!!!!!

 --Ordenar tb_servicioshistoricos por fechaalta antigua
		--Si la Fecha de Baja del Cargo es mayor a la fecha de Baja del Cargo Antiguo, calculamos puntaje!
		IF(@fechaBaja>@fechaBajaAnt)
		 BEGIN
		 IF(@fechaBaja is NOT NULL)
		  BEGIN
			SET @AnioAlta=Year(@fechaAlta)
			SET @AnioBajaAnt=Year(@fechaBajaAnt)
			SET @AnioBaja=Year(@FechaBaja) 
			--Si la Fecha de Alta del Cargo es mayor a la fecha de baja del cargo Antiguo, calculamos de esta forma:
			IF(@fechaAlta>@fechaBajaAnt)
			  BEGIN
				/* Si EL Año de Alta es Mayor al año de Baja del registro Anterior
				   Calculamos el puntaje completo del registro */
				IF(@AnioAlta>@AnioBajaAnt)
				 BEGIN
					SET @findeanio=CAST('12-31-'+CAST(Year(@fechaAlta) as varchar(4)) as datetime)
					--Devuelvo los dias trabajado en el primer año
					SET @diasAnio = Datediff(day,@fechaAlta,@findeanio)
					SET @diasUltAnio=@diasAnio
					IF(@diasAnio>=180)
					  BEGIN
						SET @pjeAntiguedadDocente =@pjeAntiguedadDocente+0.25
					  END
					SET	@anios = @anioBaja - @anioAlta
					IF(@anios>0)
					  BEGIN
						SET @pjeAntiguedadDocente = @pjeAntiguedadDocente + (@anios*0.25)
						SET @findeanio=Cast('12-31-'+Cast(year(@fechaBaja) as varchar(4)) as datetime)
						SET @diasUltAnio=Datediff(day,@fechaBaja,@findeanio)
						SET @diasUltAnio=365-@diasUltAnio
						IF(@diasUltAnio>180)
						 BEGIN
						  SET @pjeAntiguedadDocente=@pjeAntiguedadDocente-0.25
						 END 
					  END
					  SET @fechaBajaAnt=@fechabaja
			     END -- Termina "Si EL Año de Alta es Mayor al año de Baja del registro Anterior"
				--Si el Año de Alta es igual al año de Baja del registro anterior hacemos lo siguiente
				IF(@AnioAlta=@AnioBajaAnt)
				  BEGIN
					IF(@diasUltAnio>=180)
					  BEGIN
						SET @anios=@AnioBaja-@AnioAlta
						IF(@anios>0)
						   BEGIN
							SET @pjeAntiguedadDocente=@pjeAntiguedadDocente+(@Anios*0.25)
							SET @findeanio=Cast('12-31-'+Cast(year(@fechaBaja) as varchar(4)) as datetime)
							SET @diasUltAnio=Datediff(day,@fechaBaja,@findeanio)
							IF(@diasUltAnio<180)
							  BEGIN
							    SET @pjeAntiguedadDocente=@pjeAntiguedadDocente-0.25
							  END
							END
					  END
					SET @findeanio=cast('12-31-'+CAST(Year(@fechaAlta) as varchar(4)) as datetime)
					SET @diasAnio = Datediff(day,@fechaAlta,@findeanio)
					SET @diasAnio = @diasAnio + @diasultAnio
				   IF(@diasAnio>=180)
				    BEGIN
						SET @pjeAntiguedadDocente=@pjeAntiguedadDocente+0.25
						SET @anios=@AnioBaja-@AnioAlta
						IF(@anios>0)
						  BEGIN
							SET @pjeAntiguedadDocente = @pjeAntiguedadDocente + (@anios*0.25)
							SET @findeanio=Cast('12-31-'+Cast(year(@fechaBaja) as varchar(4)) as datetime)
							SET @diasUltAnio=Datediff(day,@fechaBaja,@findeanio)
							SET @diasUltAnio=365-@diasUltAnio
							IF(@diasUltAnio>180)
							 BEGIN
							  SET @pjeAntiguedadDocente=@pjeAntiguedadDocente-0.25
							 END
						  END
					END
				   SET @fechaBajaAnt=@FechaBaja
				  END -- Termina "Si el Año de Alta es igual al año de Baja del registro"			
				--SI El año de Alta es menor al Año de Baja del ultimo registro
				IF(@AnioAlta<@AnioBajaAnt)
				  BEGIN
						IF(@diasUltAnio>=180)
						BEGIN
							SET @anioBaja=YEAR(@fechaBaja)
							SET @AnioBajaAnt=YEAR(@FechaBajaAnt)
							SET @anios=@AnioBaja-@AnioBajaAnt
							IF(@anios>0)
							  BEGIN
									SET @pjeAntiguedadDocente=@pjeAntiguedadDocente+(@Anios*0.25)
									SET @findeanio=Cast('12-31-'+Cast(year(@fechaBaja) as varchar(4)) as datetime)
									SET @diasUltAnio=Datediff(day,@fechaBaja,@findeanio)
									SET @diasUltAnio=365-@diasUltAnio
								IF(@diasAnio<180)
								 BEGIN
									SET @pjeAntiguedadDocente=@pjeAntiguedadDocente-0.25
								 END
							  END
						END			
						SET @findeanio=cast('12-31-'+CAST(Year(@fechaAlta) as varchar(4)) as datetime)
						SET @diasAnio = Datediff(day,@fechaAlta,@findeanio)
						SET @diasAnio = @diasAnio + @diasultAnio
						IF(@diasAnio>=180)
						  BEGIN
							SET @pjeAntiguedadDocente=@pjeAntiguedadDocente+0.25
							SET @anioBaja=YEAR(@fechaBaja)
							SET @AnioBajaAnt=YEAR(@FechaBajaAnt)
							SET @anios=@AnioBaja-@AnioBajaAnt
							IF(@anios>0)
							 BEGIN
								SET @pjeAntiguedadDocente = @pjeAntiguedadDocente + (@anios*0.25)
								SET @findeanio=Cast('12-31-'+Cast(year(@fechaBaja) as varchar(4)) as datetime)
								SET @diasUltAnio=Datediff(day,@fechaBaja,@findeanio)
								SET @diasUltAnio=365-@diasUltAnio
								IF(@diasUltAnio>180)
								BEGIN
								 SET @pjeAntiguedadDocente=@pjeAntiguedadDocente-0.25
								END
							 END
						  END
						  SET @fechaBajaAnt=@fechaBaja
				  END --Termina "SI El año de Alta es menor al Año de Baja del ultimo registro"
		  END 

		
		 ENd 
		 End	
		 
		
						    
	fetch next from antiguedadmedia into @fechaAlta,@fechaBaja
	end
close antiguedadmedia
deallocate antiguedadmedia

--VERIFICAMOS SI SOBREPASA EL VALOR TOPE QUE ES 6
IF(@pjeAntiguedadDocente>6) SET @pjeAntiguedadDocente=6

--SUMAMOS LOS DOS PUNTAJES Y SETEAMOS LA VARIABLE DE SALIDA CON ESO
SET @pje=@pjeAntiguedadTitulo + @pjeAntiguedadDocente
		    
IF @Error <> 0
begin
	print 'NO TIENE OTROS TITULOS DOCENTES'
	PRINT @@TRANCOUNT 
	ROLLBACK TRANSACTION
end
ELSE
	COMMIT TRANSACTION
GO
